Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 vector-feature-night-mode-enabled skin-theme-clientpref-os vector-sticky-header-enabled" lang="fr" dir="ltr"><head>
<meta charset="UTF-8">
<title>Common Intermediate Language</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://fr.wikipedia.org/wiki/Common_Intermediate_Language"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Common_Intermediate_Language rootpage-Common_Intermediate_Language skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Common Intermediate Language</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="fr" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="fr" dir="ltr">
<p>Dans l'environnement de programmation <a href="Microsoft" title="Microsoft">Microsoft</a>, le <b>Common Intermediate Language</b> (<b>CIL</b>) est le <a href="Langage_de_programmation" title="Langage de programmation">langage de programmation</a> de plus <a href="Langage_de_bas_niveau" class="mw-redirect" title="Langage de bas niveau">bas niveau</a> qui peut être lu par un humain. Le code de plus haut niveau dans l'environnement <a href="Framework_.NET" class="mw-redirect" title="Framework .NET">.NET</a> est <a href="Compilateur" title="Compilateur">compilé</a> en code CIL qui est assemblé dans un code dit <a href="Bytecode" title="Bytecode">bytecode</a>. CIL est un code assembleur orienté objet et pile. Il est exécuté par une machine virtuelle.
</p><p>Le CIL était initialement connu sous le nom de Microsoft Intermediate Language ou MSIL durant les bêtas du langage .NET. Après la standardisation du <a href="C_sharp" class="mw-redirect" title="C sharp">C#</a> et de la <a href="Common_Language_Infrastructure" title="Common Language Infrastructure">CLI</a>, le bytecode fut officiellement référencé sous le nom de CIL. Les utilisateurs précoces de la technologie continuent néanmoins à se référer au terme MSIL.
</p>

<div class="mw-heading mw-heading2"><h2 id="Compilateur_JIT/NGEN"><span id="Compilateur_JIT.2FNGEN"></span>Compilateur JIT/NGEN</h2></div>
<p>Durant la compilation .NET, le <a href="Code_source" title="Code source">code source</a> est transformé en un code CIL portable, indépendant de la plateforme et du processeur, et appelé bytecode.
</p><p>Ce bytecode est compilé par la CLR/DLR en temps réel pour obtenir un code immédiatement exécutable par le processeur. Durant cette compilation, le compilateur (JIT) effectue un grand nombre de tâches pour éviter des accès illégaux à la mémoire&nbsp;:
</p>
<ul><li>optimisation spécifique à la plateforme</li>
<li>sécurisation des types</li>
<li>vérification des assembly</li></ul>
<p>Cette compilation peut aussi être réalisée avec un générateur natif d'image (NGEN). Cet outil a pour but de supprimer le temps d'attente dû à la compilation qui a lieu au niveau des <a href="Common_Language_Runtime" title="Common Language Runtime">CLR</a> et <a href="Dynamic_Language_Runtime" title="Dynamic Language Runtime">DLR</a>. Attention, l'image binaire native est placée dans le cache des 'assemblies' mais nécessite pour s'exécuter le fichier d'origine (certaines informations ne sont pas recopiées dans l'image)<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>.
</p>
<div class="mw-heading mw-heading2"><h2 id=".NET_metadata">.NET metadata</h2></div>
<p>.NET enregistre les informations concernant les classes compilées dans un fichier de nom <a href="Metadata" class="mw-redirect" title="Metadata">metadata</a>. Ces données agissent comme la bibliothèque <a href="Component_Object_Model" title="Component Object Model">Component Object Model</a>, et permettent aux applications compatibles de découvrir les interfaces, les classes, les types, et les méthodes présentes dans le code assembleur. Le processus de lecture de ces données est appelé réflexion. Ces données peuvent être lues en utilisant l'outil ILDASM fourni avec le SDK .NET Framework.
</p><p>Toute la CIL est autodescriptive, grâce aux <a href="M%C3%A9tadonn%C3%A9es" class="mw-redirect" title="Métadonnées">Métadonnées</a> <a href="Microsoft_.NET" title="Microsoft .NET">.NET</a>. La CLR vérifie les métadonnées pour s'assurer que la bonne méthode est appelée. Les métadonnées sont généralement générées par les compilateurs des langages, mais les développeurs peuvent aussi créer leurs propres métadonnées via l'utilisation d'attributs personnalisés. Les métadonnées contiennent aussi des informations à propos des assemblages et sont aussi utilisées pour implémenter la capacité de <a href="R%C3%A9flexion_(informatique)" title="Réflexion (informatique)">réflexion</a> du .NET Framework.
</p>
<div class="mw-heading mw-heading2"><h2 id=".NET_assemblies">.NET assemblies</h2></div>
<p>Le code CIL est stocké dans les assemblages .NET (ou assemblies).
</p><p>L'assemblage est le bloc de structuration fondamental des applications .NET. Un assemblage regroupe l'ensemble des éléments nécessaires au bon fonctionnement d'une application (ou partie d'une application)&nbsp;: exécutables, métadonnées, autorisations, ressources (images...), etc.
Le concept d'assemblage a été introduit pour résoudre les problèmes d'installation, d'évolution de version, d'internationalisation, de <a href="Contexte_d'ex%C3%A9cution" title="Contexte d'exécution">contexte d'exécution</a>, de conflits de DLL... À ce titre, c'est une unité de déploiement indivisible.
</p><p>Les assemblages sont constitués d´un ou plusieurs fichiers, dont l'un doit contenir un document <a href="Extensible_Markup_Language" title="Extensible Markup Language">XML</a> appelé manifeste. Le manifeste<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> contient&nbsp;:
</p>
<ul><li>la liste de l'ensemble des fichiers utilisés (exécutables, DLL, données, images, ressources)</li>
<li>les métadonnées,</li>
<li>la liste des autres assemblages utilisés par l'application</li>
<li>l'ensemble des informations liées aux autorisations et à la sécurité de l'assemblage.</li></ul>
<p><br>
Les assemblages .NET sont enregistrés au format <a href="Portable_Executable_File_Format" class="mw-redirect" title="Portable Executable File Format">exécutable portable</a> (PE) courant sur la plate-forme <a href="Windows" class="mw-redirect" title="Windows">Windows</a> pour tous les fichiers <a href="Dynamic_Link_Library" title="Dynamic Link Library">DLL</a> ou <a href=".EXE" class="mw-redirect" title=".EXE">EXE</a>. Le nom complet d'un assemblage (à ne pas confondre avec le nom du fichier sur le disque) contient son nom simple, son numéro de version, sa culture et sa <a href="Cl%C3%A9_publique" class="mw-redirect" title="Clé publique">clé publique</a>. La clé publique est unique et est générée à partir du <a href="Fonction_de_hachage" title="Fonction de hachage">hachage</a> de l'assemblage après sa compilation. En conséquence, deux assemblages avec la même clé publique sont garantis d'être identiques. Une <a href="Clef_publique" class="mw-redirect" title="Clef publique">clé privée</a> peut aussi être spécifiée&nbsp;; elle est uniquement connue du créateur de l'assemblage et peut être utilisée pour le nommage fort de celui-ci. Cela garantit que l'assemblage est du même auteur lors de la compilation d'une nouvelle version.
</p><p>Le code CIL d'un assemblage .NET existe sous deux formes&nbsp;: exécutables (process assemblies) et DLL (library assemblies). Lors de la compilation, le choix du format final du fichier contenant le code source ne dépend pas de l'extension du fichier mais d'une information stockée dans un fichier PE. Ce fait explique que, dans un même répertoire, deux fichiers de même nom mais avec des extensions différentes ne peuvent par défaut exister. Ce problème a été résolu par l'utilisation d'une clé publique/privée pour signer une DLL ou un exécutable et par l'introduction par .NET du <a href="Global_Assembly_Cache" title="Global Assembly Cache">GAC</a>.
</p>
<div class="mw-heading mw-heading2"><h2 id="Notes_et_références"><span id="Notes_et_r.C3.A9f.C3.A9rences"></span>Notes et références</h2></div>
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a> </span><span class="reference-text"><a rel="nofollow" class="external free" href="http://msdn.microsoft.com/fr-fr/library/6t9t5wcf(VS.80).aspx">http://msdn.microsoft.com/fr-fr/library/6t9t5wcf(VS.80).aspx</a></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a> </span><span class="reference-text"><a rel="nofollow" class="external text" href="http://msdn2.microsoft.com/fr-fr/library/1w45z383(en-us,VS.71).aspx">Assembly Manifest</a></span>
</li>
</ol></div>
<div class="mw-heading mw-heading2"><h2 id="Voir_aussi">Voir aussi</h2></div>
<ul><li><a href="IL2CPU" title="IL2CPU">IL2CPU</a></li></ul>
<div class="navbox-container" style="clear:both;">

</div>
<ul id="bandeau-portail" class="bandeau-portail"><li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de Microsoft</span> </span></li> <li><span class="bandeau-portail-element"><span class="bandeau-portail-icone"><span class="noviewer" typeof="mw:File"></span></span> <span class="bandeau-portail-texte">Portail de la programmation informatique</span> </span></li> </ul></div><!--htdig_noindex--><div><div class="zim-footer">
Cet article est issu de <a class="external text" title="Dernière modification le 2023-11-10" href="https://fr.wikipedia.org/wiki/?title=Common_Intermediate_Language&amp;oldid=209509030">Wikipédia</a>. Sauf mention contraire, le texte est disponible sous <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fr">Creative Commons Attribution-Share Alike 4.0</a>. Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>